#include"SList.h"
void SListPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur!=NULL)
	{
		printf("%d->",cur->data);
		cur = cur->next;
	}
	printf("NULL\n");
}
SLTNode* BuySListNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	newnode->data = x;
	newnode->next = NULL;
	return newnode;
}
void SListPushBack(SLTNode** pphead, SLTDataType x)
{
	SLTNode* newnode = BuySListNode(x);
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		SLTNode* tail = *pphead;
		while (tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = newnode;
	}
}
void SListPushFront(SLTNode** pphead, SLTDataType x)
{
		SLTNode* newnode = BuySListNode(x);
		newnode->next = *pphead;
		*pphead = newnode;
}
void SListPopFront(SLTNode** pphead)
{
	SLTNode* newnode = (*pphead)->next;
	free(*pphead);
	*pphead = newnode;
}
void SListPopBack(SLTNode** pphead)
{
	if (*pphead == NULL)
	{
		return;
	}
	else if ((*pphead)->next == NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	else
	{
			SLTNode* last = *pphead,*second=NULL;
				while (last->next)
				{
					second = last;
					last = last->next;
				}
				free(last);
				second->next = NULL;
	}
}
SLTNode* SListFind(SLTNode* phead, SLTDataType x)
{
	SLTNode* cur = phead;
	while (cur)
	{
		if (cur->data == x)
		{
			return cur;
		}
		cur = cur->next;
	}
	return NULL;
}
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{
	if (pos == *pphead)
	{
		SListPushFront(pphead, x);
	}
	else
	{
		SLTNode* newnode = BuySListNode(x);
		SLTNode* last = *pphead;
		while (last->next != pos)
		{
			last = last->next;
		}
		newnode->next = last->next;
		last->next = newnode;
	}
}
void SListErase(SLTNode** pphead, SLTNode* pos)
{
	if (pos == *pphead)
	{
		SListPopFront(pphead);
	}
	else
	{
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		prev->next = pos->next;
		free(pos);
	}
}
//#include "SList.h"
//void SListPrint(SLTNode* phead)
//{
//	SLTNode* cur = phead;
//	while (cur != NULL)
//	{
//		printf("%d->", cur->data);
//		cur = cur->next;
//	}
//	printf("NULL\n");
//}
//
//SLTNode* BuySListNode(SLTDataType x)
//{
//	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
//	newnode->data = x;
//	newnode->next = NULL;
//
//	return newnode;
//}
//
//void SListPushBack(SLTNode** pphead, SLTDataType x)
//{
//	SLTNode* newnode = BuySListNode(x);
//
//	if (*pphead == NULL)
//	{
//		*pphead = newnode;
//	}
//	else
//	{
//		SLTNode* tail = *pphead;
//		while (tail->next != NULL)
//		{
//			tail = tail->next;
//		}
//		tail->next = newnode;
//	}
//}
//
//void SListPushFront(SLTNode** pphead, SLTDataType x)
//{
//	SLTNode* newnode = BuySListNode(x);
//
//	newnode->next = *pphead;
//	*pphead = newnode;
//}
//
//void SListPopFront(SLTNode** pphead)
//{
//	SLTNode* next = (*pphead)->next;
//	free(*pphead);
//
//	*pphead = next;
//}
//
//void SListPopBack(SLTNode** pphead)
//{
//	if (*pphead == NULL)
//	{
//		return;
//	}
//	else if ((*pphead)->next == NULL)
//	{
//		free(*pphead);
//		*pphead = NULL;
//	}
//	else
//	{
//		SLTNode* prev = NULL;
//		SLTNode* tail = *pphead;
//		while (tail->next != NULL)
//		{
//			prev = tail;
//			tail = tail->next;
//		}
//
//		free(tail);
//		prev->next = NULL;
//	}
//}
//
//SLTNode* SListFind(SLTNode* phead, SLTDataType x)
//{
//	SLTNode* cur = phead;
//	while (cur)
//	{
//		if (cur->data == x)
//		{
//			return cur;
//		}
//
//		cur = cur->next;
//	}
//
//	return NULL;
//}
//void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
//{
//	if (pos == *pphead)
//	{
//		SListPushFront(pphead, x);
//	}
//	else
//	{
//		SLTNode* newnode = BuySListNode(x);
//		SLTNode* prev = *pphead;
//		while (prev->next != pos)
//		{
//			prev = prev->next;
//		}
//
//		prev->next = newnode;
//		newnode->next = pos;
//	}
//}
//void SListErase(SLTNode** pphead, SLTNode* pos)
//{
//	if (pos == *pphead)
//	{
//		SListPopFront(pphead);
//	}
//	else
//	{
//		SLTNode* prev = *pphead;
//		while (prev->next != pos)
//		{
//			prev = prev->next;
//		}
//
//		prev->next = pos->next;
//		free(pos);
//	}
//}